package bean.dao;

import hbt.HibernateUtil;

import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import bean.*;

public class OrdenDePedidoDAO {
	private static OrdenDePedidoDAO instancia = null;
	private static SessionFactory sf = null;

	public static OrdenDePedidoDAO getInstancia(){
		if(instancia == null){
			sf = HibernateUtil.getSessionFactory();
			instancia = new OrdenDePedidoDAO();
		} 
		return instancia;
	}
	
	/*LEE EL ARCHIVO XML Y CARGA LA ORDEN DE PEDIDO EN LA BASE DE DATOS*/
	public void cargarOrdenDePedido(String archivo){
		try {
			OrdenDePedido orden = XmlDAO.getInstancia().cargarOrdenDePedido(archivo);
			orden.setPendiente(true);
			Session session = sf.openSession();
			session.beginTransaction();
			session.save(orden);	
		
			for (int i =0; i< orden.getItems().size();i++){
				Item_OrdenDePedido item = orden.getItems().get(i);
				item.setOrdenDePedido(orden);
				Cotizacion cot = CotizacionDAO.getInstancia().buscarCotizacion(item.getCotizacion().getNumCot());
				item.setCotizacion(cot);
				item.setFacturado(false);
				item.setPendienteDeCompra(true);
				Producto producto = ProductoDAO.getInstancia().buscarProducto(item.getProducto().getId().getNroSerie(), item.getProducto().getId().getSufijo());
				item.setProducto(producto);
				session.persist(item);
				}
			session.flush();
			session.getTransaction().commit();
			session.close();
		} catch (Exception e) {
			System.out.println (e.toString());
		}
			
	}
	
	public OrdenDePedido buscarOrdenDePedido(int numOrden){
		OrdenDePedido ordenDePedido = new OrdenDePedido();
		Session session = sf.openSession();
		Query query = session.createQuery("from OrdenDePedido odp where (odp.numOrden=:numOrden)");
		query.setParameter("numOrden", numOrden);
		ordenDePedido = (OrdenDePedido) query.uniqueResult();
		session.close();
		return ordenDePedido;
	}
	
	
	
}
